#include "kernel/types.h"
#include "kernel/stat.h"
#include "kernel/param.h"
#include "user.h"

#define true 1

int main(int argc, char *argv[])
{
    // 存放xargs所有的参数 
    char *args[MAXARG];
    for (int i = 0; i < argc; ++i)  args[i] = argv[i];
    
    // 保存一行参数
    char buf[512];
    
    // 从标准输入流中读取每一行 直到所有行读完 相当于命令执行结束
    while(read(0, buf, sizeof(char)) > 0){
        printf("111\n");
        // 参数长度 
        int l = 1;

        // 从标准输入流中读取一行 作为xargs的参数
        while ((read(0, buf+l, sizeof(char))) > 0 && buf[l] != '\n')   ++l; 

        // 字符串末尾补0
        buf[l] = 0; 

        // 将标准输入传进的一行参数附加到args中
        args[argc] = buf;
        args[argc+1] = 0;

        // 创建子进程执行命令
        int pid = fork();
        
        // fork失败
        if(pid < 0){
            printf("failed to fork!\n");
            exit(-1);
        }
        else if(pid > 0){
            // 等待子进程命令执行结束
            wait(0);
        } else {
            // args相当于不包括xargs  
            exec(args[1], args+1);

            // exec执行后自己会终止 若没终止则执行失败 
            printf("exec error\n");
        }
    }
    
    exit(0);
}